<?php
/**
 *  文件操作部分
 *  tongjh原创，交流请发邮件至576272452@qq.com
*/

//文件上传
if($_POST["eName"] == 'uploads'){
	$path = '/'.$_POST['path'].'/';//上传路径
	$verifyToken = md5('unique_salt' . $_POST['timestamp']);//安全性检测，目录已关闭
	if (!empty($_FILES)) {
		$tempFile = $_FILES['Filedata']['tmp_name'];//上传的文件名称
		$targetPath = $_SERVER['DOCUMENT_ROOT'] . $path;//上传文件的路径
		$targetFile = rtrim($targetPath,'/') . '/' . $_FILES['Filedata']['name'];//上传的文件位置
		
		$fileTypes = array('jpg','jpeg','gif','png'); // 允许的上传文件类型
		$fileParts = pathinfo($_FILES['Filedata']['name']);//上传文件类型
		
		if (in_array($fileParts['extension'],$fileTypes)) {
			move_uploaded_file($tempFile,$targetFile);
			echo '上传文件'.$targetFile.'成功';
		} else {
			echo '上传的文件类型不是允许的';
		}
	}
}


//增加目录
if($_GET["eName"] == 'addDir'){
	if(file_exists($_GET['eDir'].'/'.$_GET['fname'])){
		$msg = array('error'=>'目录已经存在');
	}else{
		if(@mkdir($_GET['eDir'].'/'.$_GET['fname'])){
			$msg = array('ok'=>'成功建立目录'.$_GET['fname'],'fname'=>$_GET['eDir'].'/'.$_GET['fname']);
		}else{
			$msg = array('error'=>'无法建立目录');
		}	
	}
	echo json_encode($msg);
}


//重命名目录
if($_GET["eName"] == 'rename'){
	$rename = explode('/',$_GET['eDir']);
	for($i=0;$i<count($rename)-1;$i++){
		$str .= $rename[$i].'/';	
	}
	$rename = $str.$_GET['fname'];
	if(@rename($_GET['eDir'],$rename)){
		$msg = array('ok'=>'成功重命名目录'.$rename,'fname'=>$rename);	
	}else{
		$msg = array('error'=>'无法重命名目录');	
	}
	echo json_encode($msg);
}

//删除目录
if($_GET["eName"] == 'deledir'){
	if(@rmdir($_GET['eDir'])){
		$msg = array('ok'=>'成功删除目录 '.$_GET['eDir']);
	}else{
		$msg = array('error'=>'无法删除目录，可能不是空目录或没有这个目录 '.$_GET['eDir']);
	}
	echo json_encode($msg);
}

//打开目录
if($_GET['path']){
	$path = $_GET['path'];
	if($path == 'root'){$path = $_SERVER['DOCUMENT_ROOT'];}
	$files = getFiles($path);
	echo json_encode($files);	
}


//增加文件
if($_GET["eName"] == 'addFile'){
	if(@touch($_GET['eDir'].'/'.$_GET['fname'])){
		$msg = array('ok'=>'成功增加文件'.$_GET['fname'],'fname'=>$_GET['eDir']);	
	}else{
		$msg = array('error'=>'无法建立文件');
	}
	echo json_encode($msg);
}

//重命名文件
if($_GET["eName"] == 'renameFile'){
	$rename = explode('/',$_GET['eDir']);
	for($i=0;$i<count($rename)-1;$i++){
		$str .= $rename[$i].'/';	
	}
	$rename = $str.$_GET['fname'];//新文件名
	if(@rename($_GET['eDir'],$rename)){
		$msg = array('ok'=>'成功重命名文件'.$rename,'fname'=>substr($str,0,-1));	
	}else{
		$msg = array('error'=>'无法重命名文件'.$rename);	
	}
	echo json_encode($msg);
}

//编辑文件
if($_GET["eName"] == 'editFile'){
	/*判断文件类型*/
	$finfo = pathinfo($_GET['url']);
	$filetype = $finfo["extension"];
	$picArray = array('jpg','jpeg','gif','png','ico');
	$txtArray = array('php','txt','inc','html','htm','js','css','asp');
	if(in_array($filetype,$picArray)){//文件是图片
		$msg["fileStr"] = $_GET['url'];	
		$msg["fileType"] = "pic";	
	}elseif(in_array($filetype,$txtArray)){//文件是文本类型
		$msg["fileStr"] = gbkToUtf8(@file_get_contents($_GET["url"]));
		$msg["fileType"] = "txt";
	}else{//文件不可编辑
		$msg["fileStr"] = "文件不可编辑";	
	}
	echo json_encode($msg);
}

//保存文件
if($_GET["eName"] == 'fileSave'){
	if(@file_put_contents($_GET["eDir"],stripslashes($_GET["fname"]))){
		$msg["ok"] = "成功修改文件";
	}else{
		$msg["error"] = "没有找到文件";
	}
	echo json_encode($msg);
}

//删除文件
if($_GET["eName"] == 'deleFile'){
	if(@unlink($_GET['eDir'])){
		$msg = array('ok'=>'成功删除文件 '.$_GET['eDir']);
	}else{
		$msg = array('error'=>'无法删除文件，请检查是否拥有删除权限 '.$_GET['eDir']);
	}
	echo json_encode($msg);
}

/**
 *  得到一个目录下的所有目录与文件
 * @access    public
 * @param     string  $path  给定的目录
 * @return    array(三维数组) 如果成功返回一个目录下的所有目录和文件，失败返回一个失败提示数组
 */
function getFiles($path){
	if($fh = @opendir($path)){
		while(false !== ($file = readdir($fh))){
			if($file == '.' || $file == '..'){
				continue;	
			}
			$filetype = filetype($path.'/'.$file);
			if($filetype == 'dir'){
				$files['dirs'][$file]['dir'] = $file;
				$files['dirs'][$file]['path'] = $path.'/'.$file;
			}
			if($filetype == 'file'){
				$files['files'][$file]['file'] = $file;
				$files['files'][$file]['path'] = $path.'/'.$file;
			}
		}
		if(is_array($files)){
			return $files;
		}else{
			return array('error'=>'没有文件');	
		}
	}else{
		return array('error'=>'没有目录');
	}
}
/**
 *  字符串编码转换,转换成uft8
 */
function gbkToUtf8 ($value) {
	$code = chkCode($value);
	if($code == "GBK"){
		return iconv("GBK", "UTF-8", $value);
	}
	if($code == "GB2312"){
		return iconv("GB2312", "UTF-8", $value);
	}
	if($code == "GB18030"){
		return iconv("GB18030", "UTF-8", $value);
	}
	return $value;	
}

/**
 *  获得字符串的编码
 */
function chkCode($string){
	 $code = array('UTF-8','GBK','GB18030','GB2312');
	 foreach($code as $c){
		 if( $string === iconv('UTF-8', $c, iconv($c, 'UTF-8', $string))){
			 return $c;
		 }
	 }
}

?>